home *** CD-ROM | disk | FTP | other *** search
/ Freaks Macintosh Archive / Freaks Macintosh Archive.bin / Freaks Macintosh Archives / Cracking / Crack-It-Up.sit / Crack-It-Up / Crack-It-Up.rsrc / TEXT_135.txt < prev    next >
Text File  |  2000-01-29  |  27KB  |  587 lines

  1. Last Modified: 24-MAY-96
  2. +-------------------------------------------------------------------mh<DoH!>-+
  3. | M______.  A______.  C______.     H____.    A______.  C______.  K____.      |
  4. |  )     :\  )     :\  )     :\     )   / /\  )     :\  )     :\  )   / /\/\ |
  5. | /       :\/   /\  :\/   /\__/_   /   /__\:\/   /\  :\/   /\__/_/   /_/   / |
  6. |/   /  \  :\  /  \  :\   \_\  :\ /   ____  :\  /  \  :\   \_\  :\  .__.  :\ |
  7. |\___\__/______\   \____________/ \___\  /______\   \_______________\   \___\|
  8. +--------------------------------------S.ssSS88$$s----S-S----,ssSS88$$8s-----+
  9.  Contributors: AX1P, Filbert,          S8   '"~$$~    S8 8S   8$$8S"~~~$8S
  10.  Observer, Maddog Hoek, oleBuzzard,   S8             S8   8S  S8$$      ~8S
  11.  Armchair Hacker, ArcAngel, Nganon   S8$.ssSS88$$s  S8$   $8S  S8$$      $8S
  12.  DATE -=> 04-MARCH-1996             S8$    '"~$$~  S8$.sss.$8S  S8$       $8S
  13.  ______kn0wledge phreak BBS______  S8$$           S8$$'"~"'$$8S  S8$      $$8S
  14.   New home of MHFAQ 719.578.8288  S8$$           S8$$       $$8S  S8s  $   $$8S
  15.    WebSite: http://iti2.net/k0p  S8$$$          S8$$$  ver  $$$8S  S8s $$ s$$$8
  16.        e-mail: k0p@iti2.net       ~$~            ~$~   2.0   ~$~    ~S8$$$Ss~$~
  17. ======================================================================$$$$====
  18.                                                                       ~~#$
  19.  
  20. SECTION I: SOFTWARE DEPROTECTION/'CRACKING'
  21. -------------------------------------------
  22.  
  23. 01. What is MACSBUG?
  24.  
  25. MacsBug is an acronym for Motorola advanced computer systems deBugger. It is                                   an assembly-language-level debugging tool for the Macintosh and Power
  26. Macintosh computers. MacsBug was written by Motorola (creator of the 68000
  27. series chip) to aid programmer's in development of Macintosh software. The
  28. versatility of MacsBug also makes it a very useful tool for software
  29. deprotection.
  30.  
  31. 02. Where can I find MacsBug?
  32.  
  33. MacsBug can be found at the Apple Corporation FTP Support Site:
  34.  
  35.  
  36. http://www.support.apple.com/pub/Apple%20SW%20Updates/US/Macintosh/Utilities
  37.  
  38. 03. How do you use MacsBug?
  39.  
  40. The answer comes from Observer in an Original piece written for the FAQ:
  41.  
  42. Macsbug for Fun and Profit
  43. Macsbug is an awesome program published by Apple and available for free. It's
  44. used by programmers to debug their programs, and crackers to help them in
  45. their work. Macsbug (MB) is what's called a "low-level debugger." This is
  46. because it works at a very low level--in other words, looking at the actual
  47. instructions being executed by the computer. Currently, the latest version of
  48. MB is 6.5.2.
  49.  
  50. Installing Macsbug is easy. Drop it in your System Folder and restart. Don't
  51. double click on it, don't put it in the Extensions folder, don't try to give
  52. it more memory--just put it in the System Folder and let it be. The next time
  53. you restart, the message "Debugger installed" will accompany your normal
  54. Welcome to Macintosh message. This confirms that Macsbug is loaded.
  55.  
  56. To stop processing and enter Macsbug (called breaking into Macsbug), press
  57. the interrupt button on your Mac. This is a small button with a circle on it.
  58. Inside the circle is a little squiggly line that looks sort of like an EKG
  59. (sometimes it's just a circle, though). It will often be accompanied by an
  60. adjacent small button with a triangle in it. This is the reset button.
  61.  
  62. Anyway, press the interrupt button, and Macsbug will appear. If your computer
  63. is one of those without hardware reset/interrupt buttons, press cmd-power.
  64. (cmd-ctrl-power is the equivalent of the reset button.)
  65.  
  66. Macsbug makes you look very cool when you use it. This is because it looks
  67. like sheer hell to anyone who doesn't know how to interpret what it gives
  68. you. What does it give you? Here's an ASCII picture of a MB screen: (view in
  69. Monaco)
  70.  
  71. ___________________________________________________________________
  72. |    SP      |                                                    |
  73. |  nnnnnn    |                                                    |
  74. |            |                                                    |
  75. | CurApName  |                                                    |
  76. | SimpleText |                                                    |
  77. |            |                                                    |
  78. | 32-bit RM  |             [previously executed                   |
  79. | SR SmxNZvc |              instructions, plus                    |
  80. |            |              output generated by                   |
  81. | D0 nnnnnn  |              your commands, show up                |
  82. | [...]      |              here]                                 |
  83. | D6 nnnnnn  |                                                    |
  84. | D7 nnnnnn  |                                                    |
  85. |            |____________________________________________________|
  86. |            | [proc name]                  ; will branch         |
  87. | A0 nnnnnn  |   +nnnn     nnnnnn   BCC.S          | 641A         |
  88. | [...]      |   +nnnn     nnnnnn * MOVE.L         | 2008         |
  89. | A7 nnnnnn  |   +nnnn     nnnnnn   CLR.W          | 4267         |
  90. |____________|_____________________________________|______________|
  91.  
  92.  
  93. Whoa! What the HELL is all this stuff? (And who in the world uses it?)
  94. Basically, unless you're using assembly language on the Mac (as a programmer
  95. or cracker, for example), you don't need to know what all this stuff means.
  96. For the benefit of those who care, however, here you go. (Other people, skip
  97. down to the next section.)
  98.  
  99. SP
  100. Stack Pointer. Not too important except for programmers/crackers.
  101.  
  102. CurApName
  103. The name of the currently running application. This is NOT (NOT NOT
  104. NOT)not   the frontmost application! Many times it will not be. To ensure
  105. that an application will be running when you break into macsbug, hold down
  106. one of its menus.
  107.  
  108. 32-bit RM
  109. Indicates whether you are in 32 or 24 bit memory mode (on any modern Mac will
  110. always be 32)fairly    and whether you're using Real Memory or Virtual
  111. Memory.
  112.  
  113. D0-D7, A0-A7: Data and address registers on the 680x0 chip, where data is
  114. sometimes stored.
  115.  
  116. [proc name]
  117. The name of the subprogram which is being executed, or "no procedure name" if
  118. none is available. If ResEdit/Resorcerer tell you the name of a subprogram is
  119. something line "<Anon_17>," MB just says "no procedure name."
  120.  
  121. ; will branch
  122. If the next instruction to be executed (the instruction directly below the
  123. procedure name) is a branch, this will pop up and say whether or not the
  124. branch will occur.
  125.  
  126. +nnnn
  127. The offset within the current procedure of the instruction on that line.
  128.  
  129. nnnnnn
  130. The absolute address in memory of the instruction on that line.
  131.  
  132. *
  133. Shows up if there's a breakpoint set on an instruction. Unless you're setting
  134. breakpoints, you won't get any of these.
  135.  
  136. BCC.S, MOVE.L, etc.
  137. The next assembly instructions which will be executed.
  138.  
  139. 641A, 2008, etc.
  140. The hex equivalent of these instructions.
  141.  
  142. And that's about it. There are lots of worthwhile things you can do in
  143. Macsbug without understanding all this stuff, though.
  144.  
  145. es
  146. Exit to Shell. Attempts to quit the current program and go back to the
  147. finder. If you crash and use this, it's best to restart the computer ASAP.
  148.  
  149. rs
  150. ReStart. Useful if you crash and can't use es, but don't want to do a
  151. hardware restart. Better than turning the computer off, because it unmounts
  152. mounted volumes.
  153.  
  154. rb
  155. ReBoot. Same as rs, but doesn't unmount mounted volumes. This makes it more
  156. or less the same as turning the computer off and then back on, or hitting a
  157. hardware reset button.
  158.  
  159. help <topic | command>
  160. Displays help for the specified topic or command. To see a list of topics,
  161. just type "help".
  162.  
  163. Base 10 <-> Base 16 (hex) <-> ASCII conversion
  164. Enter a number preceded by # for decimal, $ for hex, or in single quotes
  165. (i.e. 'q') for ASCII. Hit return. What pops up is the hex, decimal and ASCII
  166. equivalent! Nifty, eh?
  167.  
  168. Error ID lookup
  169. Crashed and want to know just what an error -43 is? Break into Macsbug and
  170. type:
  171.  
  172. error #(error ID in base 10)
  173.  
  174. and Macsbug will tell you what the error means.
  175.  
  176. A calculator!
  177. Macsbug can perform mathematical operations, such as *, +, -, /, even between
  178. number systems!
  179.  
  180. You can also do some fun stuff with Macsbug:
  181.  
  182. sw menuflash [hexadecimal number 1-FFFF]
  183. Sets the number of times a menu item flashes when selected. If you set this
  184. over 50 or so, be prepared to be very patient!
  185.  
  186. Strobe light
  187. Type "swap". Macsbug will say "Display will be swapped after each trace or
  188. step." Now type "s 20" and hit return. Ooooh!! Aaaah!! Make the number bigger
  189. if you like, but be patient... Type swap again to end the process.
  190.  
  191. And in case it ever comes up in Trivial Pursuit:
  192. The name Macsbug has nothing to do with Macs. It is an acronym for Motorola
  193. Advanced Computing Systems deBUGger. If Apple had called their computers
  194. Donuts, Macsbug would still be called Macsbug. (Motorola comes in, for those
  195. who don't know, because Motorola makes the 680x0 chips which were the heart
  196. of every Mac until the PowerPC, which is still made by Motorola.)
  197.  
  198. For Andy Ihnatko's typically unique spin (I mean that kindly, Andy) on
  199. Macsbug, check out the last page of the Feb 96 MacUser. If you're a Mac
  200. programmer and want to know how to use Macsbug to examine your programs,
  201. check out _Debugging Macintosh Software with Macsbug_, by Othmer and Straus.
  202. For information on how to use Macsbug itself, Apple publishes a manual which
  203. costs about $30.
  204.  
  205. 04. How can I use MacsBug to crack software?
  206.  
  207. "How do I get blahblahware to stop asking me to register?"
  208. (Also known as, "Will someone give me a crack to blahblahware?")
  209.  
  210. Intro...
  211. Cracking software is a huge topic--not always difficult, but one with many
  212. different aspects, all of which can be important. This is just the first step
  213. down a long road, and I urge anyone interested in truly learning about
  214. cracking to check out the "Further Reading" section at the bottom. Also, the
  215. first two appendixes (glossary and assembly reference) aren't meant as
  216. afterthoughts but as important parts of the text. Use them. Appendix 3 is
  217. useful if you want Resorcerer (which you do).
  218.  
  219. Background...
  220. Anyone who's written a few real Mac applications (or one big one) in Pascal,
  221. C, or any similar language is a good candidate to become a Mac cracker.
  222. However far down from there you rank yourself, is how much harder it's going
  223. to be for you to crack software. Try if you like, but knowing how to program
  224. is useful if you want to modify programs.
  225.  
  226. If you're freaked out about assembly language, don't be; a decent programmer
  227. in Pascal or C can acquire a fluency in assembly fairly easily. All your
  228. friends from the Toolbox exist in assembly, just with an underscore ("_")
  229. before their names. And we call them traps, rather than calls. But other than
  230. that they're pretty much the same. And lots of cracking is just changing
  231. branches, like changing conditions in an "if" statement. Nothing too hairy,
  232. right?
  233.  
  234. People generally write programs in what's called a high-level language, a
  235. language that's far from what the computer actually does but is easy for a
  236. human to remember and work with. HyperTalk is a very high-level language.
  237. Pascal and C are another notch or two down the line. In order for the
  238. computer to run programs written in these high-level languages, you need a
  239. compiler. This is a program which translates what you've written in Pascal
  240. (gibberish to the computer), into assembly language, the specific
  241. instructions which the CPU will execute to run your program. So when you open
  242. a program and look at its CODE resources, you're looking at some
  243. representation of the actual instructions the computer follows to run that
  244. program.
  245.  
  246. The Hunt...
  247. Note I said some representation. If you're using ResEdit, all you'll see is
  248. the code in hexadecimal. This doesn't do you much good. To view it as its
  249. assembly code equivalent, either spring for Resorcerer (a $256 ResEdit done
  250. right), or get the ResEdit CODE Editor, which is free and publicly available.
  251. Once you install the resources in the CODE Editor into your ResEdit
  252. application, when you open a CODE resource, you'll see something like this
  253. (and also get some new menus):
  254.  
  255. Offset     Addr      Opcode        Operand          Comment
  256. ===========================================================
  257.  
  258. Here's what this all means:
  259.  
  260. Offset
  261. The line number in bytes, counting from the beginning of the CODE
  262. resource segment
  263.  
  264. Addr
  265. The line number, counting from the beginning of the current
  266. procedure/subprogram
  267.  
  268. Opcode
  269. The assembly instruction to execute
  270.  
  271. Operand
  272. Data which accompanies the instruction (parameters)
  273.  
  274. Comment
  275. Misc. info on a line of code, plus hex representation of the line
  276.  
  277. All this exists in Resorcerer as well, just with slightly different names. To
  278. toggle between viewing absolute and relative offsets in Resorcerer, press
  279. cmd-2 while viewing a CODE resource.
  280.  
  281. Go to the "Modules" (Routines in Resorcerer) menu. There you'll find a list,
  282. in the order they exist in the code, of all of the procedures in that code
  283. segment. (Happy Resorcerer users will have this menu alphabetized.) Find a
  284. program which has more than anon1, anon2, etc. Procedure names are a huge
  285. help to a cracker, because let's say you want to remove a registration dialog
  286. box--which catches your eye more, "DoRegDialog," or "anon36?"
  287.  
  288. So you have your program. Let's say what's annoying you is that it always
  289. shows a dialog which you can't dismiss for a few seconds, until it enables
  290. the OK button.
  291.  
  292. Go look at the program's DLOG resources and find the dialog you want to
  293. avoid. If it isn't there, check out the WIND resources as well. Convert the
  294. dialog/window's ID number into hex. If you can't do this manually, Resorcerer
  295. can do it for you, or else find one of the many shareware calculators that
  296. has the capability. Also, TI-85 owners can just punch go into the mode
  297. settings and set it to use hex. Never thought that thing would come in handy,
  298. did you?
  299.  
  300. Anyway. Search for this value in the code, just a few lines before a call to
  301. the _GetNewDialog trap. (Cmd-G in Resorcerer, or hold down option when
  302. opening the CODE resource in ResEdit and use ResEdit's search tools.) Here's
  303. a sample from an actual application, whose nag dialog is DLOG ID #9990=$2706:
  304.  
  305. move.w    #$2706,-(sp)
  306. clr.l     -(sp)
  307. pea       -$0001
  308. _GetNewDialog
  309.  
  310. What's this doing? It's MOVEing the hex number $2706 to "sp." This is the
  311. Stack Pointer, a place where things are stored temporarily--typically
  312. parameters passed to a procedure or function, and afterwards what it returns.
  313. Sure enough, the next line is:
  314. movea.l   (sp)+,a4
  315.  
  316. This is where we move the DialogPtr given to us by _GetNewDialog, off of the
  317. stack pointer and put its address in register A4. (We know GetNewDialog
  318. returns a DialogPtr because we bought the Inside Mac CD while we were doing
  319. Mac programming in a high-level language. I wasn't kidding when I said Mac
  320. programming experience would help.)
  321.  
  322. The Kill...
  323. OK, so now we know where the dialog is loaded. And, because we've used
  324. dialogs in a higher-level language before, we know that other toolbox
  325. calls--ModalDialog and CloseDialog for example--tend to accompany a
  326. GetNewDialog call. Further, the problem we wish to overcome is that it stops
  327. for a few seconds before enabling the OK button. This implicates another
  328. likely accomplice, HiliteControl, which is used to enable and disable dialog
  329. items.
  330.  
  331. Let's say the programmer was a jerk and left the subprogram names in the
  332. code. Maybe the subprogram you found the dialog in is called "DoNagBox." If
  333. it's this obvious, you could try NOP'ing the entire DoNagBox subprogram. Note
  334. that while this is easy in Resorcerer, it is very difficult in ResEdit.
  335.  
  336. Maybe that doesn't work. Maybe that makes the program crash. OK, time to try
  337. something else. While the nag box is open, break into Macsbug (read about
  338. that in another section of the FAQ) and type "atb closedialog". This will
  339. cause Macsbug to interrupt processing when a call to the _CloseDialog trap is
  340. made. Dismiss the nag dialog, and poof, you're in Macsbug. Use the "t"
  341. command to step through the code, through the subprogram which holds the
  342. _GetNewDialog for the nag box. When you hit an "rts," keep going--the next
  343. line will be the line after the line which calls the nag subprogram. Here's a
  344. little diagram:
  345.  
  346.                  /-> doNagBox
  347.                 /      [other assembly]
  348. [assembly]     /       move.w $2706, -(sp)
  349.               /        _GetNewDialog
  350. jsr doNagBox /         [more assembly]
  351.  
  352. [more assembly]<---\   _CloseDialog
  353.                     \  [still more assembly]
  354.                      \-rts
  355.  
  356. We reach "jsr doNagBox," which sends us off to the doNagBox subprogram. This
  357. puts up a dialog and then closes it when we hit a button. When all this has
  358. been done, we're returned to the line of code immediately following the "jsr
  359. doNagBox" line. Just like any other language.
  360.  
  361. We could NOP the "jsr doNagBox," but that tends to be asking for trouble; any
  362. parameters passed to or received from the subprogram are left wandering
  363. around, which will probably cause a crash. What we should look for are
  364. branches, probably beq or bne. Is there one of these above the jsr which
  365. skips down just a few lines past the jsr? If so, try changing the condition
  366. of this branch (such as beq->bra).
  367.  
  368. Other Techniques
  369. The idea of looking for a dialog's ID is one which frequently works. However,
  370. there are other limitations you might want to overcome. Here are some ideas
  371. for other program limitations:
  372. Only works for x minutes, then quits
  373. Look for the _TickCount trap (hex A975) in the code--this is the most common
  374. method of doing this. Something else to watch for is _ExitToShell, (hex
  375. A9F4), which MAY be the way the program quits itself. If the subprogram names
  376. are in the code, look especially hard at anything resembling "eventloop,"
  377. "mainloop," etc.
  378.  
  379. Only works for a week
  380. Look for the _SecondsToDate (hex A9C6) trap, and a branch a while after it.
  381. Also, if a dialog pops up to tell you to register, look for the ID of this
  382. dialog.
  383.  
  384. Only lets you play the first x levels
  385. Several possibilities here. If a dialog appears when you reach a higher
  386. level, the easiest is to search for the dialog ID in the code. If it quits,
  387. look for _ExitToShell. If you absolutely can't find what you're looking for,
  388. search for the highest possible level number in the code. (If you can only
  389. play levels 1-4, search for $0004.) If this shows up in or near some form of
  390. cmp, you may have struck paydirt.
  391.  
  392. Practice, Practice, Practice
  393. With just a few months of practice, you'll be surprised at how many things
  394. you can crack in less than an hour. Here are some things you can try looking
  395. at, in order of difficulty: (easiest->hardest)
  396. Relax 1.0 (any shareware site)
  397. GraphicConverter 1.7.7 /1 (ditto)
  398. Warcraft 1.0
  399. Net Watchman demo (ftp.aggroup.com) (don't worry about printing)
  400. GopherGolf 2.0.7 (shareware again)
  401. DragStrip 1.2.4
  402.  
  403. (Note: Some of these are commercial software. These cracks should only be
  404. attempted on software you own, and for your own convenience.)
  405.  
  406. Appendix 1: Glossary
  407. Branch:
  408. Each command in assembly has an offset, essentially a line number. Branching
  409. to an offset sets the PC to the specified offset and then continues execution
  410. normally.
  411.  
  412. Byte, word, long word:
  413. The most common data sizes. Use monaco for the table below:
  414.         Bits   Hex digits    Range (decimal)
  415. Byte  |   8        2         0-255
  416. Word  |  16        4        0-65535
  417. LWord |  32        8      0-4294967295
  418.  
  419. These can be halved to alter the range to include negative values. So a byte
  420. can also be used to go from #-127 to #127, a word from #-32767 to #32767, and
  421. so on. In a long word (for example) this is accomplished by going from $0 to
  422. $7FFF (#0-#32767) normally. $8000 is then equal to #-32767, up to $FFFF=#-1.
  423. The same system is used for the other data sizes as well.
  424.  
  425. Flags:
  426. There are five status flags: Z, C, N, V, X. These keep track of the results
  427. of operations. Conditional branches such as bne and beq check the flags to
  428. decide whether or not to branch.
  429. Z: Zero flag. Set if the result of an operation is zero, or if two compared
  430. values are equal. Cleared otherwise.
  431. C: Carry flag. Set if the a math operation produced a digit carry (i.e.
  432. $FF+$1)
  433. N: Negative flag. Set if the result of a math operation is negative, or the
  434. most significant (rightmost) bit in a number is true.
  435. V: Overflow flag. Set if an operation's result can't be held in the data
  436. provided (such as $FF+$1 in a byte). Not too common.
  437. X: Extended flag. Used for precision in math operations. Also not too common.
  438.  
  439. Hexadecimal:
  440. Usually referred to as hex. This is base 16. Our number system is base 10
  441. (aka decimal), which means each column is ten times the previous one. In hex,
  442. you start with the ones column, then you have a sixteens column, then a 256's
  443. column, and so on. Hex is just like our normal system, except you count to 15
  444. before going to the next place. The extra 6 numbers you need for this are
  445. provided by the letters A-F. So counting in hex goes like this:
  446. 1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,
  447. 20,21...
  448.  The signs # and $ are used to indicate decimal (base 10) and hexadecimal,
  449. respectively. So #10=$A; (#15+#1)=($F+$1)=$10; #255=$FF; and so on.
  450. Two hexadecimal digits are equivalent to eight bits, or one byte.
  451.  
  452. Registers:
  453. 680x0 chips have 16 registers, which are places to hold data (essentially a
  454. variable in higher-level languages). These are divided into 8 data registers,
  455. labeled D0-D7, and 8 address registers, labeled A0-A7. Each register can hold
  456. a long word. The address and data registers are themselves identical, but
  457. there are commands which can be used on address registers which cannot be
  458. used on data registers.
  459.  
  460. Subprogram/Subroutine/Procedure/Function:
  461. Used more or less interchangeably. If used specifically, they mean the same
  462. thing they would in a high-level language.
  463.  
  464. Appendix 2: Quick Assembly Instruction Reference
  465. This is a brief description of the most common commands in assembly language.
  466. There are many others however, and anyone seriously wanting to learn how to
  467. crack will soon need more than this. See the "further reading" section for
  468. suggestions.
  469. Suffixes: .b, .w, .l
  470. Indicates that the suffixed instruction will apply to a Byte, Word, or Long
  471. word, respectively. So cmp.b will compare two bytes.
  472.  
  473. add
  474. ADDs two values, and stores the result in the second operand. The Z flag is
  475. set if the result was zero, cleared otherwise.
  476.  
  477. beq
  478. Branch if EQual. Branches if Z flag is set. 67 hex.
  479.  
  480. bne
  481. Branch if Not Equal. Branch if the Z flag is clear. 66 hex.
  482.  
  483. bra
  484. BRanch Always. Move PC to the indicated offset and continue. 60 hex.
  485.  
  486. clr
  487. CLeaR. Sets its operand to zero.
  488.  
  489. cmp
  490. CoMPares two values. If the values are equal then the Z flag is set.
  491. Otherwise it is cleared.
  492.  
  493. jsr/rts
  494. Jump SubRoutine. Exactly like calling a procedure or function in a high-level
  495. language: sets PC to the subprogram's address, but first puts the PC's
  496. current value on the stack. When the specified subprogram is completed, the
  497. rts ("ReTurn from Subroutine") command will be used to return to where the
  498. subprogram was called.
  499.  
  500. link/unlk
  501. LINK/UNLinK. Generally used to create local variables for subprograms. (Link
  502. creates, unlink disposes at end of subprogram.)
  503.  
  504. move
  505. MOVEs the first operand into the second. When you see something like (A2), it
  506. means that the data stored in the address held in A2 is being used. A2
  507. without the parentheses means the actual data held in A2.
  508.  
  509. nop
  510. No OPeration. Useful for simply deleting code without changing the location
  511. in memory of other code. 4E71 hex.
  512.  
  513. sub
  514. SUBtract. Same as add, but subtracts the first operand from the second.
  515.  
  516. Appendix 3: Ordering Resorcerer, a cracker's best friend
  517. The single-copy price of Resorcerer is US $256 (decimal!).  We also offer
  518. quantity, reseller, and educational discounts at anywhere between 20% and 50%
  519. off of the above price.  Please call us for more information and a quote.
  520.  
  521. Our mailing address is:
  522. Mathemaesthetics, Inc.
  523. P.O. Box 298
  524. Boulder, CO, 80306-0298
  525. Phone: (303) 440-0707
  526. Fax:     (303) 440-0504
  527.  
  528. Internet: resorcerer@aol.com
  529.  
  530. Appendix 4: FURTHER READING
  531.  
  532. Surprise surprise, a few pages aren't enough to teach you assembly language.
  533. For more information, check out these sources...
  534. Files by The Shepherd and Vassal
  535. Each of these guys has written a much bigger file on Mac cracking. The
  536. Shepherd's is the larger one and better for the beginner (and a great file in
  537. general), Vassal's offers more specific technique tips. I used the Shepherd's
  538. file as a reference for the assembly reference section here.
  539.  
  540. Basic MacCracking files
  541. I've written a few files which describe how to crack specific programs. Of
  542. course I'm biased, but I think these are all very helpful to beginners,
  543. especially since they were written as I learned things myself.
  544.  
  545. Fantasm's help files
  546. Fantasm is an assembly language development program, for the sickos who
  547. actually create whole programs in assembly language. While using the program
  548. itself has been shown to cause severe social problems, it comes with six
  549. large files written to teach someone how to write assembly language. These
  550. aren't something anyone serious about this stuff should pass up.
  551.  
  552. Debugging Macintosh Software with Macsbug
  553. Macsbug in invaluable to a cracker. I would be shot if I took the space to
  554. describe how to use it here, but it's not that hard to figure out. What is
  555. hard is discovering how to use it in the context of a Macintosh (i.e. where
  556. is the event record that _waitnextevent just got?), and this book tells you
  557. all of that.
  558.  
  559. Macsbug Reference and Debugging Guide
  560. Apple's Macsbug documentation, plus EXCELLENT assembly tutorial. Another one
  561. serious folks shouldn't miss out on.
  562.  
  563. 05. What are some other useful MacsBug related resources?
  564.  
  565. DBugr 1.2.1...........Puts a floating bomb on your desktop that you can click
  566.  
  567.                       on at any time to enter macs bug. Widely available.
  568.                       http://vsl.cnet.com Search: 'macsbug'
  569.  
  570. Break Before..........Break into MacsBug on the very first instruction of the
  571.  
  572.                       INIT code of ANY extension you choose. Widely
  573. available.
  574.                       http://vsl.cnet.com Search 'macsbug'
  575.  
  576. Debugger F-Key........Drop into the debugger. Recognizes MacsBug, TMON, The
  577.                       Debugger, and ABZmon. Will also recognize any new
  578.                       debuggers that follow Apple's debugger protocol as
  579.                       documented in the "MacsBug Reference and Debugging
  580.                       Guide." http://vsl.cnet.com Search 'macsbug'
  581.  
  582. Cool MacsBug Tricks...Cool things you can do with MacsBug.
  583.                       http://www.biddeford.com/~benyc/Macsbug.html
  584.  
  585. Tips for MacsBug......Place to obtain and submit MacsBug programming tips.
  586.                       http://www.scruznet.com/~crawford/Computers/macsbug.html
  587.